<!--
 *Author：jxx
 *Contact：283591387@qq.com
 *业务请在@/extension/service/sly_databasic/sly_material_groupmodel.jsx或sly_material_groupmodel.vue文件编写
 *新版本支持vue或【表.jsx]文件编写业务,文档见:https://v3.volcore.xyz/docs/view-grid、https://v3.volcore.xyz/docs/web
 -->
<template>
    <view-grid ref="grid"
               :columns="columns"
               :detail="detail"
               :details="details"
               :editFormFields="editFormFields"
               :editFormOptions="editFormOptions"
               :searchFormFields="searchFormFields"
               :searchFormOptions="searchFormOptions"
               :table="table"
               :extend="extend"
               :onInit="onInit"
               :onInited="onInited"
               :searchBefore="searchBefore"
               :searchAfter="searchAfter"
               :addBefore="addBefore"
               :updateBefore="updateBefore"
               :rowClick="rowClick"
               :modelOpenBefore="modelOpenBefore"
               :modelOpenAfter="modelOpenAfter">
        <!-- 自定义组件数据槽扩展，更多数据槽slot见文档 -->
        <template #gridHeader>
        </template>
    </view-grid>
</template>
<script setup lang="jsx">
    import extend from "@/extension/service/sly_databasic/sly_material_groupmodel.jsx";
    import viewOptions from './sly_material_groupmodel/options.js'
    import { ref, reactive, getCurrentInstance, watch, onMounted } from "vue";
    const grid = ref(null);
    const { proxy } = getCurrentInstance()
    //http请求，proxy.http.post/get
    const { table, editFormFields, editFormOptions, searchFormFields, searchFormOptions, columns, detail, details } = reactive(viewOptions())

    let gridRef;//对应[表.jsx]文件中this.使用方式一样

    // 辅助函数：根据"类型"字段的值来控制"默认工艺路线"字段的显示与隐藏
    const updateDefaultProcessRouteVisibility = (materialType) => {
        // 确保 gridRef 已初始化
        if (!gridRef) {
            console.warn("[调试信息] gridRef 未初始化，无法更新字段可见性。");
            return;
        }

        // 查找 'Default_ProcessId' (默认工艺路线) 的配置选项
        const allFormOptions = gridRef.editFormOptions.flat();
        const defaultProcessRouteFieldOption = allFormOptions.find(f => f.field === 'Default_ProcessId');

        // 调试信息：确认是否找到了该字段配置
        console.log("[调试信息] defaultProcessRouteFieldOption 的值为:", defaultProcessRouteFieldOption);

        if (defaultProcessRouteFieldOption) {
            // ****** 核心修改点：这里根据实际的字符串 key 值进行判断 ******
            // **请务必根据您实际的"物料类型"字典数据，确认"成品"和"半成品"对应的字符串 key 值！**
            // 例如，如果"成品"的key是 "1"，"半成品"的key是 "2"
            const isVisible = (materialType === '1' || materialType === '2'); // 与字符串 key 进行比较

            defaultProcessRouteFieldOption.hidden = !isVisible; // 设置隐藏状态
            defaultProcessRouteFieldOption.required = isVisible; // 根据可见性设置必填状态

            console.log(`[调试信息] 当前 Material_Type (类型) 的 Key 值: "${materialType}"`);
            console.log(`[调试信息] 'Default_ProcessId' 字段是否可见: ${isVisible ? '是' : '否'} (hidden: ${defaultProcessRouteFieldOption.hidden})`);
            console.log(`[调试信息] 'Default_ProcessId' 字段是否必填: ${defaultProcessRouteFieldOption.required ? '是' : '否'}`);
        } else {
            console.warn("未能找到 'Default_ProcessId' 字段的表单配置选项。请检查 options.js 中 field 名称是否正确。");
        }
    };

    //生成对象属性初始化
    const onInit = async ($vm) => {
        gridRef = $vm;
        //与jsx中的this.xx使用一样，只需将this.xx改为gridRef.xx
        //更多属性见：https://v3.volcore.xyz/docs/view-grid

        // 监听"类型"字段的变化，其 field 为 'Material_Type'
        watch(() => gridRef.editFormFields.Material_Type, (newValue) => {
            updateDefaultProcessRouteVisibility(newValue);
        }, { immediate: true }); // immediate: true 确保组件加载时（onInit之后）也执行一次
    }
    //生成对象属性初始化后,操作明细表配置用到
    const onInited = async () => {
    }
    const searchBefore = async (param) => {
        //界面查询前,可以给param.wheres添加查询参数
        //返回false，则不会执行查询
        return true;
    }
    const searchAfter = async (rows, result) => {
        return true;
    }
    const addBefore = async (formData) => {
        //新建保存前formData为对象，包括明细表，可以给给表单设置值，自己输出看formData的值
        return true;
    }
    const updateBefore = async (formData) => {
        //编辑保存前formData为对象，包括明细表、删除行的Id
        return true;
    }
    const rowClick = ({ row, column, event }) => {
        //查询界面点击行事件
        // grid.value.toggleRowSelection(row); //单击行时选中当前行;
    }
    const modelOpenBefore = async (row) => {//弹出框打开后方法
        return true;//返回false，不会打开弹出框
    }
    const modelOpenAfter = (row) => {
        //弹出框打开后方法,设置表单默认值,按钮操作等
        if (gridRef && gridRef.editFormFields) {
            // 在新增模式下，如果 Material_Type 未定义或为空字符串，设置一个默认值
            if (!row) { // `!row` 表示是新增操作
                // `editFormFields.Material_Type` 初始值是 ""
                if (gridRef.editFormFields.Material_Type === "" || gridRef.editFormFields.Material_Type === undefined || gridRef.editFormFields.Material_Type === null) {
                    // **请务必根据您实际的"物料类型"字典数据，确认"原材料"或其他非成品/半成品对应的字符串 key 值！**
                    // 假设"原材料"的 key 值是 "0"，如果不是，请替换为实际值。
                    // 设置一个有效的默认 key 值，以避免"请选择类型"的验证错误
                    gridRef.editFormFields.Material_Type = '0'; // <-- 设置一个默认的字符串 key 值
                    console.log(`[调试信息] 新增模式下，Material_Type 被设置为默认 key: "${gridRef.editFormFields.Material_Type}" (请检查是否是实际的原材料key)`);
                }
            }

            const currentMaterialType = gridRef.editFormFields.Material_Type; // 获取当前 Material_Type 的值
            updateDefaultProcessRouteVisibility(currentMaterialType); // 更新 Default_ProcessId 的可见性
        }
    }
    //监听表单输入，做实时计算
    //watch(() => editFormFields.字段,(newValue, oldValue) => {	}) // 此处原有的 watch 已移至 onInit 中
    //对外暴露数据
    defineExpose({})
</script>
<style lang="less" scope>
</style>
